<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  // var 声明变量的传统关键词
  // let ES6新增声明变量的关键词

  // let 和 var 的共同点和区别
  // 共同点 
  // 都可以声明局部变量和全局变量

  /* var a = 10;
  let b = 20;
  console.log(a,b); // 10 20 

  function fn(){
      var a = 100;
      let b = 200;
      console.log(a,b); // 100 200
  }
  fn();
  console.log(a,b); // 10 20  */

  // 区别
  // 1.  var声明的变量可以重新声明,let声明的变量重复声明会报错(一个作用域中只允许存在一个同名变量 可以重新赋值)
  // 2.  var声明的变量有变量提升, let声明的变量没有变量提升,会报错
  // 3.  在块级作用域中 let声明的变量是局部的(块级作用域内生效) 块级作用域对var没有影响


  console.log(a);
  console.log(b); // Cannot access 'b' before initialization(在初始化之前不能访问'b')

  var a = 10;
  var a = 10.1;  // 重新声明
  let b = 20;
  // let b = 20.1;  //重新声明 报错Identifier 'b' has already been declared(标识符'b'已经声明)
  b = 20.1;    // 重新赋值 是可以的

  console.log(a, b); // 10 20 





</script>

</html>